package com.ztom.v2;

/**
 * @author ZhangTao
 */
public class Code70MinStack {

    class Node {
        int val;
        Node next;
        int curMin;

        public Node(int val, Node next, int curMin) {
            this.val = val;
            this.next = next;
            this.curMin = curMin;
        }
    }

    class MinStack {

        Node cur;

        public MinStack() {
        }

        public void push(int val) {
            if (cur == null) {
                cur = new Node(val, null, val);
            } else {
                cur = new Node(val, cur, Math.min(cur.curMin, val));
            }
        }

        public void pop() {
            Node node = cur;
            cur = cur.next;
            node.next = null;
            node = null;
        }

        public int top() {
            return cur == null ? -1 : cur.val;
        }

        public int getMin() {
            return cur == null ? -1 : cur.curMin;
        }
    }

//    class Node {
//        int val;
//        Node next;
//        Node pre;
//        int curMin;
//
//        public Node(int val) {
//            this.val = val;
//        }
//    }
//
//    class MinStack {
//
//        Node cur;
//
//        public MinStack() {
//        }
//
//        public void push(int val) {
//            if (cur == null) {
//                cur = new Node(val);
//                cur.curMin = val;
//            } else {
//                Node node = new Node(val);
//                node.pre = cur;
//                node.curMin = Math.min(cur.curMin, val);
//                cur.next = node;
//                cur = node;
//            }
//        }
//
//        public void pop() {
//            Node node = cur;
//            cur = cur.pre;
//            node.pre = null;
//            node.next = null;
//            node = null;
//        }
//
//        public int top() {
//            return cur == null ? -1 : cur.val;
//        }
//
//        public int getMin() {
//            return cur == null ? -1 : cur.curMin;
//        }
//    }
}
